package negocio;

import java.awt.Point;

/**
 * Um inimigo simples. É capaz de andar em linha reta na horizontal, parar e
 * atirar.
 */
public class RoboCinza extends Inimigo {

	enum Status {
		aparecendo, andando, parado, atirando
	}

	/** Velocidade padrão com que um robô cinza se move para a direita */
	public static final int DIREITA = 2;

	/** Velocidade padrão com que um robô cinza se move para a esquerda */
	public static final int ESQUERDA = -2;

	/** Indica que o robô deve ficar parado */
	public static final int PARADO = 0;
	private boolean vivo = true;
	private int velocidade;
	private static String imgParado = "img/cinza0.gif";
	private static String[] imgAtirando = { "img/cinza1.gif", "img/cinza2.gif",
			"img/cinza3.gif", "img/cinza4.gif", "img/cinza5.gif",
			"img/cinza6.gif", "img/cinza7.gif", "img/cinza8.gif" };

	/**
	 * Cria um robô cinza, sem iniciar a thread.
	 * 
	 * @param hotspot
	 *            o hotspot sobre o qual o robô irá se mover. Lembre-se que um
	 *            robô cinza só sabe ficar parado ou mover-se na horizonal.
	 * @param velocidade
	 *            a velocidade com que o robô irá se mover sobre o hotspot
	 */
	public RoboCinza(HotSpot hotspot, int velocidade) {
		super(imgParado, new Point(22, 82), hotspot);
		this.velocidade = velocidade;
	}

	@Override
	public void run() {
		Status status = Status.aparecendo;
		int posicaoTiro = 0;

		/* Aparece */
		setHotX(hotspot.inicio.x);
		setHotY(hotspot.inicio.y);
		try {
			sleep(500);
		} catch (InterruptedException e1) {
			e1.printStackTrace();
		}
		status = (velocidade == 0) ? Status.parado : Status.andando;

		while (vivo) {

			/* Anda */
			if (status == Status.andando) {
				try {
					sleep(30);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				if (((velocidade > 0) && ((velocidade + getHotX()) > hotspot.fim.x))
						|| ((velocidade < 0) && ((velocidade + getHotX()) < hotspot.fim.x))) {
					velocidade = hotspot.fim.x - getHotX();
					status = Status.parado;
				}
				setHotX(getHotX() + velocidade);
			}

			/* Pára */
			if (status == Status.parado) {
				setImage(imgAtirando[0]);
				try {
					sleep(1000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				status = Status.atirando;
			}

			/* Atira */
			if (status == Status.atirando) {
				try {
					sleep(60);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				setImage(imgAtirando[posicaoTiro]);
				if (posicaoTiro == 7) {
					posicaoTiro = 0;
					status = Status.parado;
					Jogador.getInstance().levaTiro();
				} else {
					posicaoTiro++;
				}
			}
		}
	}

	public void morre() {
		vivo = false;
	}

}
